// 抽象产品接口
class AbstractButton {
  create() {
    throw new Error("抽象方法不能调用");
  }
}

class AbstractInput {
  create() {
    throw new Error("抽象方法不能调用");
  }
}

// 具体产品类
class DarkButton extends AbstractButton {
  create() {
    console.log("创建暗色模式按钮");
  }
}

class DarkInput extends AbstractInput {
  create() {
    console.log("创建暗色模式输入框");
  }
}

class LightButton extends AbstractButton {
  create() {
    console.log("创建亮色模式按钮");
  }
}

class LightInput extends AbstractInput {
  create() {
    console.log("创建亮色模式输入框");
  }
}

// 抽象工厂接口
class AbstractFactory {
  createButton() {
    throw new Error("抽象方法不能调用");
  }

  createInput() {
    throw new Error("抽象方法不能调用");
  }
}

// 具体工厂类
class DarkThemeFactory extends AbstractFactory {
  createButton() {
    return new DarkButton();
  }

  createInput() {
    return new DarkInput();
  }
}

class LightThemeFactory extends AbstractFactory {
  createButton() {
    return new LightButton();
  }

  createInput() {
    return new LightInput();
  }
}

// 客户端代码
function createUI(factory) {
  const button = factory.createButton();
  const input = factory.createInput();
  button.create();
  input.create();
}

const darkFactory = new DarkThemeFactory();
const lightFactory = new LightThemeFactory();

createUI(darkFactory); // 创建暗色模式的按钮和输入框
createUI(lightFactory); // 创建亮色模式的按钮和输入框
